#ifndef _ARC_
#define _ARC_

#include <iostream>

#include "structure.hpp"
#include "noeud.hpp"

using namespace std;

/* -- Définition de la structure Arc --
struct Arc {
    int valeur;
    Noeud* src;
    Noeud* dst;
};
*/

/*
    Pour toutes les fonctions si dessous, la variable verbose permet d'afficher des information
    supplémentaires lors de l'éxecution, principalement utiles au débuggage
*/

Arc* initArc (int valeur, bool verbose = false);
/*  initialise un arc avec une valeur
    Postconditions :
        * renvoie un arc initialisé avec pour valeur l'entier valeur
*/

Arc* initArc(Noeud* src, Noeud* dst, int valeur, bool verbose = false);
/*  Initialise un arc à partir de deux noeuds et d'une valeur
    Préconditions :
        * src et dst sont initialisés
    Postconditions :
        * renvoie un noeud initialisé pour source le noeud src, pour destination le noeud dst et
          pour valeur l'entier valeur
*/


void affichageArc (Arc *a);
/*  affiche un arc
    Préconditions :
        * a initialisé
    Postconditions :
        * affiche la source et la destination de l'arc ainsi que sa valeur
*/

void affichageArcExt (Arc *a);
/*  affiche la destination d'un arc
    Préconditions :
        * a initialisé
    Postconditions :
        * affiche la destination de l'arc ainsi que sa valeur
*/

void affichageArcInt (Arc *a);
/*  affiche la source d'un arc
    Préconditions :
        * a initialisé
    Postconditions :
        * affiche la source de l'arc ainsi que sa valeur
*/

void testamentArc (Arc *a);
/*  libére un arc
    Préconditions :
        * a initialisé
    Postconditions :
        * a libéré
*/

#endif // _ARC_

